package thead;

import java.util.concurrent.ThreadPoolExecutor;

/**
 * ThreadPoolExecutor 的构造方法 和 拒绝策略
 */

public class Demo23 {
    public static void main(String[] args) {
        //ThreadPoolExecutor pool = new ThreadPoolExecutor();
        /**
         * int corePoolSize, int maximumPoolSize
         *     核心线程数           最大线程数
         *
         * long keepAliveTime, TimeUnit unit
         *  允许临时线程摸鱼的时间    时间单位  (非核心线程并需要不工作就立刻销毁,而是空闲到一定时间再销毁)
         * BlockingQueue<Runnable> workQueue
         *        堵塞队列, 用来存放线程池中的任务,
         *        (根据需要灵活设置: 需要优先级 就使用 PriorityBlokingQueue)
         *                        不需要优先级,任务数量恒定就使用ArrayBlockingQueue
         *                        不需要优先级,并且任务数量波动较大,使用 LinkBlockingQueue
         * ThreadFactory threadFactory
         * 工厂模式的体现
         * 此处使用 ThreadFactory 作为工厂类,由这个类负责创建线程
         * 使用工厂类创建线程,主要是为了在创建的过程中,对线程的属性做出一些设置
         * 如果手动创建线程,就需要手动设置这些属性,就比较麻烦,所以就使用工厂方法来封装一下
         *
         * RejectedExecutionHandler handler
         * 拒绝策略
         * 我们线程池的任务是有上限的, 拒绝策略是用来决定我们是用哪种方式来对待线程池任务爆满的情况
         * AbortPolicy
         * 抛出异常, 直接罢工, 结束线程,啥都不干
         * CallerRunsPolicy
         * 新任务是由哪个线程添加的,就由哪个线程来完成
         * DiscardOldestPolicy
         * 丢弃任务队列中最老的任务
         * DiscardPolicy
         * 丢弃新添加进来的任务
         */
    }
}
